<?php
/**
 * Created by PhpStorm.
 * User: Administrator
 * Date: 2017/9/5 0005
 * Time: 上午 10:43
 */
namespace Admin\Model;
use Think\Model;
class CommentModel extends Model
{
    //评论时允许接收的字段
    protected $insertFields = array('star', 'goods_id', 'content');
    protected $updateFields = array('id', 'username', 'password');
    protected $_validate = array(
        array('goods_id', 'require', '参数错误！', 1),
        array('star', '1,2,3,4,5', '参数错误！分值只能是1-5',1,'in'),
        array('content', '1,200', '内容必须是1-200个字符之间',1,'length'),

    );

    /***********************发表评论之前 判断会员有没有登录*************************/

    public function _before_insert(&$data,$option){
        $memberId = session('m_id');
        if(!$memberId){
            $this->error='必须先登录！';
            return FALSE;
        }else{
            $data['addtime'] = date('Y-m-d H:i:s');
            $data['member_id'] = $memberId;
        }

        /************出合理印象的数据**********/
        //因为是另外的数据库 所以这里不能再上面的$insertFields 写进允许接收字段里
        $yxName = I('post.yx_name');
        if($yxName){
            //处理分隔符号
            $yxName = str_replace('，',',',$yxName);
            $yxName = explode(',',$yxName);
            $yxModel = D('yinxiang');
            foreach($yxName as $k=>$v){

                //判断用户的乱输入
                $v = trim($v);                  //去掉左右空格
                if(empty($v)){
                    continue;                  //如果尾款 就跳过
                }

                //先判断有没有这样的印象
                $has = $yxModel->where(array(
                    'goods_id'=>$data['goods_id'],
                    'yx_name'=>$v,
                ))->find();

                // 如果有就把这个字段+1
                if($has){
                    $yxModel->where(array(
                        'goods_id'=>$data['goods_id'],
                        'yx_name'=>$v,
                    ))->steInc('yx_count');
                }else{
                    $yxModel->add(array(
                        'goods_id'=> $data['goods_id'],
                        'yx_name'=> $v,
                        'yx_count'=>1,
                    ));
                }
            }
        }

    }


    /*************************ajax 制作无刷新分页******************************/
    public function search($goods_id,$pageSize = 5){
        //因为tp自带的一点击就跳转了  所以不能用
        //先取出这个商品的评论的总数

        $where['a.goods_id'] = array('eq',$goods_id);
        $count = $this->alias('a')->where($where)->count();
        //算出总页数
        $pageCount = ceil($count/$pageSize);
        //获取当前页数 其下的意思是 max必须大于1的 （int）必须是整数  然后获取到页面的p 这里默认是第一页
        $currentPage = MAX(1,(int)I('get.p',1));
        //计算偏移量  计算limit的第一个参数
        $offset = ($currentPage -1) * $pageSize;

        /***************取出好评率的数据 思路 取出所有好评率 用循环计算不同星的数量 计算好评率*******************/
        //次功能只在当页面是第一页的时候取
        $hao = $zhong  = $cha = 0;
        if($currentPage == 1 ){
            $starts = $this->field('star')->where($where)->select();
            foreach($starts as $k=>$v){
                if($v['star'] > 3)
                    $hao ++;
                elseif($v['star'] == 3)
                    $zhong ++;
                else
                    $cha ++;
            }

            //先计算出总共有多少评论
            $total = $hao + $zhong + $cha;
            //计算好评率(这里可能遇到除不尽的 无限除的 所以要想办法 这里只要保留俩位小数就可以了 用round)
            $hao = round(($hao/$total)*100,2);       //这个函数的意思四舍五入求值 这个函数一般有俩个参数 第一个是四舍五入求值 第二个是位数
            $zhong =  round(($zhong/$total)*100,2);
            $cha =  round(($cha/$total)*100,2);
            //以上好评率 计算完成之后 返回给前台

        }


        //取数据  会员表（头像） 评论表所有
        //一对多的时候  一个商品 N条评论  要以商品id分组 不然会一堆
        $data = $this->alias('a')
            ->field('a.id,a.content,a.addtime,a.star,a.clicke_count,b.face,b.username,COUNT(c.id) reply_count')
            ->join('LEFT JOIN __MEMBER__ b ON a.member_id=b.id
		        LEFT JOIN __COMMENT_REPLY__ c ON a.id=c.comment_id')
            ->where($where)
            ->order('a.id DESC')
            ->limit("$offset,$pageSize")
            ->group('a.id')
            ->select();

        //这里只需要数据和总数 至于翻页交给前台js  因为是用ajax 所以不用这里拼
        return array(
            'data'=>$data,
            'pageCount'=>$pageCount,
            'hao'=>$hao,
            'zhong'=>$zhong,
            'cha'=>$cha,
            'memberId'=>(int)session('m_id'),
        );
    }
}